class Solution {
public:
    string addStrings(string num1, string num2) {
        string ret;
        int len1 = num1.size() - 1;
        int len2 = num2.size() - 1;
        int carry = 0; // 进位值
        while (len1 >= 0 || len2 >= 0) {
            int digit1 = len1 >= 0 ? (num1[len1] - '0') : 0;
            int digit2 = len2 >= 0 ? (num2[len2] - '0') : 0;
            int sum = digit1 + digit2 + carry;
            ret.insert(ret.begin(), sum % 10 + '0'); // 在结果的最前面插入当前位的数字
            carry = sum / 10; // 计算进位
            len1--;
            len2--;
        }
        if (carry > 0) {
            ret.insert(ret.begin(), carry + '0'); // 如果还有进位，插入最高位的数字
        }
        return ret;
    }

    string multiply(string num1, string num2) {
        if (num1 == "0" || num2 == "0") {
            return "0"; // 如果有一个乘数为0，则结果为0
        }
        string result = "0";
        int m = num1.size(), n = num2.size();
        for (int i = n - 1; i >= 0; i--) {
            string curr; // 存储当前位的乘法结果
            int carry = 0; // 进位值
            // 乘法
            for (int j = n - 1; j > i; j--) {
                curr.push_back('0'); // 乘数的当前位数后面补0
            }
            int multiplier = num2[i] - '0';
            for (int j = m - 1; j >= 0; j--) {
                int product = (num1[j] - '0') * multiplier + carry;
                curr.insert(curr.begin(), product % 10 + '0'); // 在结果的最前面插入当前位的数字
                carry = product / 10; // 计算进位
            }
            if (carry > 0) {
                curr.insert(curr.begin(), carry + '0'); // 如果还有进位，插入最高位的数字
            }
            // 加法
            result = addStrings(result, curr); // 调用加法函数将当前乘法结果与累加结果相加
        }
        return result;
    }
};